package com.mjf.cjt.vo;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * desc
 * </p>
 *
 * @author chenshoumeng
 * @date 2025/7/27 16:37
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class TOtherInStockOrderCreateVo {
    @JsonProperty("dto")
    private Dto dto;
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public static class Dto {
        @JsonProperty("ExternalCode")
        private String ExternalCode;

        @JsonProperty("Code")
        private String Code;

        @JsonProperty("VoucherType")
        private VoucherType VoucherType;

        @JsonProperty("BusinessType")
        private BusinessType BusinessType;

        @JsonProperty("RdStyle")
        private RdStyle RdStyle;

        @JsonProperty("Warehouse")
        private Warehouse Warehouse;

        @JsonProperty("Department")
        private Department Department;

        @JsonProperty("Partner")
        private Partner Partner;

        @JsonProperty("Clerk")
        private Clerk Clerk;

        @JsonProperty("RDRecordDetails")
        private List<RDRecordDetails> RDRecordDetails;

        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        @Builder
        public static class VoucherType {
            @JsonProperty("Code")
            private String Code;

            @JsonProperty("VoucherDate")
            private String VoucherDate;
        }

        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        @Builder
        public static class BusinessType {
            @JsonProperty("Code")
            private String Code;
        }

        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        @Builder
        public static class RdStyle {
            @JsonProperty("Code")
            private String Code;
        }

        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        @Builder
        public static class Warehouse {
            @JsonProperty("Code")
            private String Code;

            @JsonProperty("Name")
            private String Name;
        }

        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        @Builder
        public static class Department {
            @JsonProperty("Code")
            private String Code;

            @JsonProperty("Name")
            private String Name;
        }

        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        @Builder
        public static class Partner {
            @JsonProperty("Code")
            private String Code;
        }

        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        @Builder
        public static class Clerk {
            @JsonProperty("Code")
            private String Code;

            @JsonProperty("Memo")
            private String Memo;
        }

        @Data
        @AllArgsConstructor
        @NoArgsConstructor
        @Builder
        public static class RDRecordDetails {
            @JsonProperty("Code")
            private String Code;

            @JsonProperty("inventoryLocations")
            private inventoryLocations inventoryLocations;

            @JsonProperty("Inventory")
            private Inventory Inventory;

            @JsonProperty("Project")
            private Project Project;

            @JsonProperty("Batch")
            private String Batch;

            @JsonProperty("BaseQuantity")
            private BigDecimal BaseQuantity;

            @JsonProperty("Amount")
            private BigDecimal Amount;

            @JsonProperty("Price")
            private BigDecimal Price;

            @JsonProperty("ProductionDate")
            private String ProductionDate;

            @JsonProperty("ExpiryDate")
            private String ExpiryDate;

            @JsonProperty("ExaminerDate")
            private String ExaminerDate;

            @Data
            @AllArgsConstructor
            @NoArgsConstructor
            @Builder
            public static class inventoryLocations {
                @JsonProperty("Code")
                private String Code;
            }


            @Data
            @AllArgsConstructor
            @NoArgsConstructor
            @Builder
            public static class Inventory {
                @JsonProperty("Code")
                private String Code;

                @JsonProperty("Name")
                private String Name;
            }

            @Data
            @AllArgsConstructor
            @NoArgsConstructor
            @Builder
            public static class Project {
                @JsonProperty("Code")
                private String Code;

                @JsonProperty("Name")
                private String Name;
            }

        }
    }
}
